/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package manejadores;

import Manager.BDManager;
import entidates.Carrera;
import entidates.IEntidad;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import utility.Globals;

/**
 *
 * @author Overpower
 */
public class ManejadorCarrera extends Manejador{

    public ManejadorCarrera()
    {
        
        try {
            ActualizarLista(BDManager.Get().Select("*", "carrera", "alta=1" ));
        } catch (SQLException ex) {
            Logger.getLogger(ManejadorPersona.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    }
    
    @Override
    protected void ActualizarLista(ArrayList<HashMap<String, Object>> _ht) {
        if( null == _ht )
            return;
        
        _listaEntidades.clear();
        for (HashMap<String, Object> _registro : _ht) {
            Carrera _c = new Carrera();
            _c.SetID( (Integer)_registro.get("idCarrera"));
            _c.SetNombre((String)_registro.get("nombre"));
            _c.SetSemestres((Integer)_registro.get("semestres"));
            _c.SetDescripcion((String)_registro.get("descripcion"));
            _c.SetCreatedAt( new Date( ((java.sql.Date)_registro.get("createdAt")).getTime() ) );
            _c.SetTitulo( (String)_registro.get("titulo"));
            _listaEntidades.add(_c);
        }
    }

    @Override
    protected HashMap<String, String> GetHashMap(IEntidad _entidad)
    {
        Carrera _c = (Carrera)_entidad;
        HashMap<String, String > _hm = new HashMap<>();
        
        _hm.put( "nombre", _c.GetNombre());
        _hm.put( "descripcion", _c.GetDescripcion() );
        _hm.put( "titulo", _c.GetTitulo() );
        _hm.put("semestres", _c.GetSemestres().toString() );
        _hm.put("createdAt", Globals.GetFormatedDate( _c.GetCreatedAt()) );
        
        return _hm;
    }
    
    @Override
    public String Agregar_BD(IEntidad _entidad) {
        //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        HashMap<String, String> _ht = GetHashMap(_entidad);
        return BDManager.Get().Insert("carrera", _ht);
    }

    @Override
    public String Modificar_BD(IEntidad _entidad) {
        HashMap<String, String> _ht = GetHashMap(_entidad);
        return BDManager.Get().Update("carrera", _ht, "idCarrera="+_entidad.GetID());
    }

    @Override
    public String Eliminar_BD(IEntidad _entidad) { 
        Carrera _p = (Carrera)_entidad;
        HashMap<String, String> _ht = new HashMap<>();
        _ht.put("alta", "0");
        return BDManager.Get().Update("carrera", _ht, "idCarrera="+_p.GetID());
    }

    @Override
    public String Buscar(String _nombre, String _cadena, String _rango, Integer _offset, Integer _limit) {
         String _err = "";
        
        try {
            String _filtro = _nombre.toLowerCase();
            
            // manejar algun nombre especial

            
            Boolean _isRange  = _rango != null;
            Boolean _hasLimit = _offset != null && _limit != null;
            String _where = "alta=1 AND " + _filtro;
            
            if( _isRange )
                _where += " BETWEEN '" + _cadena + "' AND '" + _rango + "'";
            else
                _where += " LIKE '" + _cadena + "%'";
            
            if( _hasLimit)
                _where += " LIMIT " + _offset + ", " + _limit;
            
            ActualizarLista( BDManager.Get().Select("*", "carrera", _where) );
            
        } catch (SQLException ex) {
            _err = "Error en Busqueda. - " + ex.getMessage();
        }
        
        return _err;
    }

    @Override
    public String ValidarEntidad(IEntidad _object) {
        String _error = "";
        
        return _error;
    }
    
}
